from logging import Logger
import requests
from loguru import logger
from basic.base_login import frontLogin, adminLogin
from basic.config import ENV

# response_hook 是一个响应钩子函数，它的作用是在每次 HTTP 请求收到响应后自动执行，用于记录响应信息,正常来说，别的包下是不会出发response_hook的但是api的文件继承了baseRequest，所以会触发钩子
def response_hook(response, *args, **kwargs):
    logger.info(f"接口响应参数为：{response.text}")
class baseRequest:
    def __init__(self):
        # 创建一个requests会话对象，用于保持会话状态（如cookies）
        self.session = requests.session()
        self.session.hooks['response'] = [response_hook]
        # 将会话对象赋值给实例变量，供子类使用
        self._request = self.session


class baseAdminRequest(baseRequest):
    def __init__(self):
        """初始化方法，调用父类构造并设置管理员请求头"""
        # super()是调用父类的初始化方法，创建会话并设置钩子
        super().__init__()
        # 更新请求头，设置内容类型为JSON，并添加管理员认证信息
        # adminLogin()函数返回管理员的认证令牌（token）
        self._request.headers.update({
            'content-type': 'application/json',
            "authori-zation": adminLogin()
        })


    def post(self,api_name,url,json_data):
        # 记录请求数据到日志
        logger.info(f"{api_name}的接口请求信息为：{json_data}")
        # 发送POST请求，自动使用管理员的会话和请求头
        response = self._request.post(url=ENV.ADM_HOST+url, json=json_data)
        return response.json()
    def get(self,api_name,url, params=None):
        # 记录请求参数到日志
        logger.info(f"{api_name}的接口请求信息为：{params}")
        # 发送GET请求，自动使用管理员的会话和请求头
        response = self._request.get(url=ENV.ADM_HOST+url, params=params)
        return response.json()


class baseFrontRequest(baseRequest):
    def __init__(self):
        super().__init__()
        self._request.headers.update({
            'content-type': 'application/json',
            "authori-zation": frontLogin()
        })
    def post(self , api_name, url, json_data):
        # 记录请求数据到日志
        logger.info(f"{api_name}的接口请求信息为：{json_data}")
        # 发送POST请求，自动使用前端用户的会话和请求头
        response = self._request.post(url=ENV.FONT_HOST+url, json=json_data)
        return response.json()
    def get(self,api_name,url,params=None):
        # 记录请求参数到日志
        logger.info(f"{api_name}的接口请求信息为：{params}")
        # 发送GET请求，自动使用管理员的会话和请求头
        response = self._request.get(url=ENV.FONT_HOST+url, params=params)
        return response.json()